Ruby 日記 18日目: 正規表現
#Ruby_日記 #2021-09-12
https://rex.libertyfish.co.jp/exam_histories/42141/user_answers/eee71275-52ad-40ac-a6cc-798826417ab5
次のコードを実行するとどうなりますか
code:gold/ex18/main.rb
p "Matz is my tEacher"[/a-zA-Z.*/]
選択肢:
"tEacher"が表示される
" tEacher"が表示される
"tE"が表示される
" tE"が表示される
解説:
String#[] https://docs.ruby-lang.org/ja/2.1.0/method/String/i/=5b=5d.html
self[regexp, nth = 0] -> String[permalink][rdoc]
slice(regexp, nth = 0) -> String
正規表現 regexp の nth 番目の括弧にマッチする最初の部分文字列を返します。 nth を省略したときや 0 の場合は正規表現がマッチした部分文字列全体を返します。 正規表現が self にマッチしなかった場合や nth に対応する括弧がないときは nil を返します。
つまり、今回の問題では正規表現/[a-z][A-Z].*/にマッチした部分文字列全体を返す、ということだね。
. は任意の1文字
https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html#anychar
メタ文字 . は改行を除く任意の1文字にマッチします。
* は0回以上
https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html#quantifier
* 0回以上
すなわち、 「半角小文字1文字」「半角大文字1文字」「任意の文字を0回以上繰り返し」の順で表現される文字列
正解は「"tEacher"が表示される」だね
code:sh
# ruby gold/ex18/main.rb
"tEacher"